基于ARM的Cortex—M3架構(gòu)
1 硬件架構(gòu)
以STM32F103為主控芯片,主要包含了5個(gè)外圍電路模塊:實(shí)時(shí)時(shí)鐘、模數(shù)處理、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)傳輸和界面顯示。模數(shù)處理是A/D模塊加預(yù)處理電路,數(shù)據(jù)存儲(chǔ)采用一片2 MB SPI Flash,數(shù)據(jù)傳輸采用CAN接口和RS232接口,顯示屏是4.3寸。如圖1所示,為設(shè)備的硬件架構(gòu)圖。
系統(tǒng)采用的
是ST公司推出的基于Cortex—M3內(nèi)核的32位ARM芯片系列。本系統(tǒng)選用的STM32F103ZET6屬于該系列的高容量芯片,片內(nèi)Flash容量為512 KB,片內(nèi)SRAM容量為64 KB,主頻為72MHz。具備完整的FSMC總線(xiàn)、26位地址線(xiàn)和16位數(shù)據(jù)寬度。系統(tǒng)的顯示屏為翰彩4.3寸TFT液晶屏,分辨率為640×480,貼一塊電阻式觸摸屏。顯示屏驅(qū)動(dòng)模塊是SSD1963,采用了16位(5位紅色、6位綠色、5位藍(lán)色)64K接口模式,由FSMC數(shù)據(jù)接口連接控制。觸摸屏芯片為ADS7843,它輸入觸摸屏四路電壓,用SPI通信輸出觸摸點(diǎn)位置信息。圖2是LCD接口電路。
CAN總線(xiàn)協(xié)議的高可靠性使其在工業(yè)上得到廣泛應(yīng)用。STM32F103的CAN總線(xiàn)單元支持協(xié)議2.0A和2.0B;選用的CAN收發(fā)器是TJA1050,在CAN協(xié)議控制器和物理總線(xiàn)之間起到接口作用,設(shè)計(jì)120 Ω的終端匹配電阻以適應(yīng)不同的CAN總線(xiàn)網(wǎng)絡(luò)。CAN模塊的接口電路如圖3所示。
2 軟件設(shè)計(jì)
2.1 整體架構(gòu)
嵌入式系統(tǒng)設(shè)計(jì)的第一步在于清晰地劃分任務(wù),設(shè)定優(yōu)先級(jí),根據(jù)任務(wù)的執(zhí)行情況調(diào)度系統(tǒng)資源。如圖4所示,μC/OS是系統(tǒng)的總調(diào)度,之上有6個(gè)主要的任務(wù),它們分別對(duì)應(yīng)硬件架構(gòu)中的模塊,運(yùn)行整個(gè)程序。
每個(gè)任務(wù)分配不同的優(yōu)先級(jí)和啟動(dòng)方式,有周期性啟動(dòng)、信號(hào)量驅(qū)動(dòng)兩種方式。顯示功能由μCGUI驅(qū)動(dòng),F(xiàn)AT32文件由FatFs管理。任務(wù)劃分及資源如表1所列。
劃分任務(wù)之后,先實(shí)現(xiàn)板級(jí)支持包,再對(duì)通信協(xié)議進(jìn)行設(shè)計(jì),然后繪制整個(gè)μCGUI的界面。
2.2 板級(jí)支持包
板級(jí)支持包是指在單板上實(shí)現(xiàn)全部基礎(chǔ)功能,例如時(shí)鐘管理、掉電備份、串口、CAN總線(xiàn)通信、A/D采樣以及顯示任務(wù)的fsmc接口、驅(qū)動(dòng)優(yōu)盤(pán)的SPI接口等。利用ST公司提供的標(biāo)準(zhǔn)化庫(kù)函數(shù),調(diào)用庫(kù)函數(shù)進(jìn)行初始化,配置模塊參數(shù),在使用時(shí)根據(jù)需要調(diào)用函數(shù)或在中斷進(jìn)行,完成后封裝成一個(gè)Lib庫(kù)文件使用。
在系統(tǒng)中斷里設(shè)置:①CAN中斷,用于快速反映CAN口信息;②USART接收中斷,用于接收串口信息;③RTC中斷,用于實(shí)時(shí)時(shí)鐘中斷;④USB有兩個(gè)中斷,用于USB端口的收發(fā)設(shè)置。板級(jí)支持包的函數(shù)如圖5所示。
全系統(tǒng)的參數(shù)如下:A/D總線(xiàn)模塊采樣率為1 kHz,最高為5 kHz,通道數(shù)8個(gè),可以拓展到16通道。串口速率為115 200,數(shù)據(jù)位為8位,無(wú)校驗(yàn)。CAN用CAN-1口,設(shè)置為500 kbps、250 kbps、100kbps、50 kbps的4檔速率,擴(kuò)展ID形式。
初始化單板需進(jìn)行時(shí)鐘校正,存儲(chǔ)正確的時(shí)間。單板掉電之后用電池工作,存入備份寄存器,上電再取時(shí)間參數(shù)(即秒的數(shù)量),換算成對(duì)應(yīng)的日期和時(shí)間。顯示模塊采用FSMC并行接口控制,實(shí)現(xiàn)在屏幕上畫(huà)出單個(gè)點(diǎn)、單條直線(xiàn)等基本繪圖功能,就能提供接口給μC總線(xiàn)GUI使用。
2.3 CAN總線(xiàn)通信協(xié)議
本設(shè)計(jì)采用CAN總線(xiàn)協(xié)議,用狀態(tài)機(jī)進(jìn)行狀態(tài)轉(zhuǎn)換,在具體的指令驅(qū)動(dòng)下實(shí)現(xiàn)從握手到傳輸數(shù)據(jù)的過(guò)程。圖6是CAN總線(xiàn)通信的狀態(tài)機(jī)。
CAN總線(xiàn)通信指令是英文單詞縮寫(xiě)用ASCII碼表示的結(jié)果。在本設(shè)計(jì)中,有一個(gè)主節(jié)點(diǎn)和3個(gè)從節(jié)點(diǎn)。主節(jié)點(diǎn)和從節(jié)點(diǎn)對(duì)應(yīng)的指令應(yīng)答方式如圖7所示。初始化時(shí),主節(jié)點(diǎn)在發(fā)出“TEST”指令后,從節(jié)點(diǎn)回復(fù)“ALOK”,表示從節(jié)點(diǎn)收到指令,工作正常。1號(hào)和2號(hào)從節(jié)點(diǎn)負(fù)責(zé)測(cè)量溫度、濕度和壓力。主節(jié)點(diǎn)發(fā)送“NEED”指令,從節(jié)點(diǎn)1號(hào)和2號(hào)回復(fù)溫度、濕度數(shù)值給主節(jié)點(diǎn),格式是對(duì)應(yīng)的“指令+數(shù)據(jù)”。主節(jié)點(diǎn)根據(jù)ID與指令,判斷數(shù)據(jù)正確性,及時(shí)顯示在屏幕上。
采樣時(shí),主節(jié)點(diǎn)在指令的驅(qū)動(dòng)下,切換不同狀態(tài)。主節(jié)點(diǎn)發(fā)送預(yù)備指令,確認(rèn)從節(jié)點(diǎn)準(zhǔn)備好之后,再發(fā)出采樣開(kāi)始的“SMPL”命令,從節(jié)點(diǎn)收到指令后,啟動(dòng)采樣,完成后回復(fù)“GOGO”指令。從節(jié)點(diǎn)在采樣結(jié)束后再回復(fù),是為了減少采樣啟動(dòng)的延時(shí)。主節(jié)點(diǎn)進(jìn)入接收數(shù)據(jù)的狀態(tài),發(fā)送傳輸數(shù)據(jù)指令“DATA”,從節(jié)點(diǎn)先用“LENS”指令告訴主節(jié)點(diǎn),本次采樣長(zhǎng)度是多少,便于主節(jié)點(diǎn)在接收數(shù)據(jù)的時(shí)候統(tǒng)計(jì),是否接收到了數(shù)量正確的數(shù)據(jù)。從節(jié)點(diǎn)開(kāi)始發(fā)送數(shù)據(jù),最后發(fā)送“ENDD”指令,告訴主節(jié)點(diǎn)數(shù)據(jù)傳送結(jié)束。主節(jié)點(diǎn)的數(shù)據(jù)標(biāo)識(shí)清空,回到初始狀態(tài)。這樣完成了一輪數(shù)據(jù)采樣、發(fā)送過(guò)程。
2.4 μC/OS嵌入式操作系統(tǒng)
首先,已經(jīng)將板級(jí)支持包編寫(xiě)完畢,而嵌入式系統(tǒng)首先是單板運(yùn)行,其次是將底層軟件用任務(wù)的方式重新編寫(xiě)。在單板運(yùn)行嵌入式系統(tǒng)就是移植的過(guò)程,主要有:
①定義常量的值,聲明數(shù)據(jù)類(lèi)型、堆棧參數(shù);
②編寫(xiě)堆棧初始化參數(shù);
③編寫(xiě)任務(wù)切換的函數(shù),還有在中斷函數(shù)中提供時(shí)鐘中斷,即給操作系統(tǒng)時(shí)鐘使用。
移植完成之后,進(jìn)行任務(wù)的編寫(xiě)。分配給7個(gè)任務(wù)不同的優(yōu)先級(jí)、堆棧資源和運(yùn)行方式。其中,App_TaskStart是全部任務(wù)的起始點(diǎn),優(yōu)先級(jí)最高,由這個(gè)任務(wù)來(lái)建立其他任務(wù),并且啟動(dòng)統(tǒng)計(jì)任務(wù)。App_TaskCreate建立了其他所有的任務(wù)。AppTaskUSerIF任務(wù)實(shí)現(xiàn)用戶(hù)界面,Task_CAN任務(wù)實(shí)現(xiàn)CAN報(bào)文接收,Task_FatFileWR任務(wù)實(shí)現(xiàn)FatFs文件讀寫(xiě),AppTaskKbd任務(wù)實(shí)現(xiàn)觸摸驅(qū)動(dòng),Clock_Update任務(wù)實(shí)現(xiàn)秒更新。
任務(wù)的周期性啟動(dòng)在建立任務(wù)時(shí)確定,例如AppTaskUserIF任務(wù)始終在運(yùn)行,采用WM_Exec函數(shù)做界面更新。AppTaskKbd是10 ms周期讀取觸摸坐標(biāo),實(shí)現(xiàn)繪制鼠標(biāo)箭頭和觸控功能。
信號(hào)量是在所有任務(wù)建立之前建立。CAN_MBOX是采用OSMboxCreate建立的郵箱信號(hào)量,能夠傳送CAN接收中斷的消息以啟動(dòng)CAN任務(wù),F(xiàn)LAGRECORD是OSFlagCreate建立的多值信號(hào)量,能置位4位,啟動(dòng)文件讀寫(xiě)任務(wù)。ClocK_SEM是OSSemCreate建立的二值信號(hào)量,專(zhuān)門(mén)用于秒更新中斷的信號(hào)量。
CAN_MBOX=OSMboxCreate((void*)0);
//建立CAN接收任務(wù)的消息郵箱
FLAGRECORD=OSFlagCreate(0,err);
//建立記錄文件的開(kāi)關(guān)量
Clock_SEM=OSSemCreate(1);
//建立秒更新中斷的信號(hào)量
在運(yùn)行μC/OS之后,還可以在os_cfg.h函數(shù)中關(guān)閉OS不需要的功能模塊,以達(dá)到裁減系統(tǒng)、節(jié)約內(nèi)存空間的目的。
2.5 μC/GUI顯示界面
需要先移植,再設(shè)計(jì)界面。移植過(guò)程可以參考其他文獻(xiàn)。設(shè)計(jì)界面分成兩步:第一步是寫(xiě)軟件框架,第二步是設(shè)計(jì)具體界面。每一個(gè)對(duì)話(huà)框都是用創(chuàng)建函數(shù)建立,創(chuàng)建函數(shù)會(huì)調(diào)用事先定義的資源,包括控件的形式、位置、大小、初始化值等,對(duì)話(huà)框還指定了相應(yīng)的回調(diào)函數(shù),通過(guò)回調(diào)函數(shù)操作對(duì)話(huà)框的行為,完成初始化、繪制、按鈕響應(yīng)等。代碼如下:
值得注意的是,建立對(duì)話(huà)框有兩種函數(shù),即阻塞型和非阻塞型。采用非阻塞型的對(duì)話(huà)框才能在多對(duì)話(huà)框的操作中實(shí)現(xiàn)同步更新。不然,當(dāng)前對(duì)話(huà)框使能就會(huì)阻塞顯示其他對(duì)話(huà)框。
GUI_CreateDialogBox(); //非阻塞型
GUI_ExecDialogBox(); //阻塞型
界面設(shè)計(jì)的細(xì)化繪制工作集中在:①初始化時(shí),控件資源決定了界面的布置和美觀;②在回調(diào)函數(shù)中,按鈕響應(yīng)函數(shù)決定了對(duì)話(huà)框完成任務(wù)的流程。圖8所示是主節(jié)點(diǎn)運(yùn)行界面的主對(duì)話(huà)框。
2.6 適配從節(jié)點(diǎn)
按照主節(jié)點(diǎn)的界面和狀態(tài)機(jī),修改程序以適配從節(jié)點(diǎn)監(jiān)控設(shè)備運(yùn)行狀態(tài)的任務(wù)需求。目前設(shè)計(jì)了3種從節(jié)點(diǎn):一是采集溫度和濕度;二是采集壓力;三是標(biāo)準(zhǔn)數(shù)據(jù)采集及傳輸。從節(jié)點(diǎn)的程序結(jié)構(gòu)和主節(jié)點(diǎn)是一致的,需要修改的地方有:
①CAN總線(xiàn)通信協(xié)議采用的是從節(jié)點(diǎn)的應(yīng)答指令和狀態(tài)機(jī);
②顯示界面的資源與布置需修改。對(duì)不需要的任務(wù)做屏蔽,節(jié)省資源和空間。
圖9所示為第三個(gè)從節(jié)點(diǎn)的界面。
3 系統(tǒng)應(yīng)用
通過(guò)總線(xiàn)方式將一個(gè)主節(jié)點(diǎn)和三個(gè)從節(jié)點(diǎn)連接。主節(jié)點(diǎn)選擇500 kbps的波特率,收到從節(jié)點(diǎn)發(fā)來(lái)的狀態(tài)確認(rèn)良好的消息,主節(jié)點(diǎn)的當(dāng)前狀態(tài)顯示塊從黃色變成綠色。從節(jié)點(diǎn)1和節(jié)點(diǎn)2選擇數(shù)據(jù)發(fā)送間隔,按下傳輸按鈕,將溫度、濕度及壓力數(shù)值傳送給主節(jié)點(diǎn)顯示。
采樣測(cè)試中,在需要采集的時(shí)刻單擊主節(jié)點(diǎn)按鈕,從節(jié)點(diǎn)開(kāi)始采樣,進(jìn)度條運(yùn)行。點(diǎn)擊“Transfer”按鈕后,從節(jié)點(diǎn)和主節(jié)點(diǎn)的傳輸進(jìn)度條走動(dòng)一致,完成傳輸后又恢復(fù)
了初值。說(shuō)明正常完成數(shù)據(jù)采集、傳輸?shù)倪^(guò)程,發(fā)送的數(shù)據(jù)被完整接收。
接收完數(shù)據(jù),主節(jié)點(diǎn)通過(guò)USB線(xiàn)連接電腦,就顯示為一個(gè)U盤(pán),其中txt文件是接收的采樣數(shù)據(jù),文件名為記錄的實(shí)時(shí)日期和時(shí)間。
結(jié)語(yǔ)
本文設(shè)計(jì)的基于總線(xiàn)的嵌入式設(shè)備狀態(tài)監(jiān)控平臺(tái)具有主、從節(jié)點(diǎn)的分層次結(jié)構(gòu)??偩€(xiàn)結(jié)構(gòu)可靠性高,使用數(shù)量多。從節(jié)點(diǎn)多種模式能夠適應(yīng)豐富的設(shè)備健康狀態(tài)監(jiān)控,且每個(gè)節(jié)點(diǎn)的界面具有交互性。嵌入式系統(tǒng)提供了很好的平臺(tái),便于拓展任務(wù),本監(jiān)控平臺(tái)具有很強(qiáng)的實(shí)用價(jià)值。
實(shí)驗(yàn)室中關(guān)鍵設(shè)備的信息需要及時(shí)采集、反饋到主控室中,又因?yàn)樵O(shè)備類(lèi)型多,促使設(shè)計(jì)者開(kāi)發(fā)主節(jié)點(diǎn)、從節(jié)點(diǎn)的結(jié)構(gòu),總線(xiàn)通信的監(jiān)測(cè)平臺(tái)。同時(shí),平臺(tái)的用戶(hù)界面需具有二次開(kāi)發(fā)能力。因此,本文設(shè)計(jì)了一種設(shè)備狀態(tài)監(jiān)測(cè)平臺(tái)。
文章轉(zhuǎn)載至:電子網(wǎng)
提交
新大陸自動(dòng)識(shí)別精彩亮相2024華南國(guó)際工業(yè)博覽會(huì)
派拓網(wǎng)絡(luò)被Forrester評(píng)為XDR領(lǐng)域領(lǐng)導(dǎo)者
智能工控,存儲(chǔ)強(qiáng)基 | ??低晭?lái)精彩主題演講
展會(huì)|Lubeworks路博流體供料系統(tǒng)精彩亮相AMTS展會(huì)
中國(guó)聯(lián)通首個(gè)量子通信產(chǎn)品“量子密信”亮相!